// 常量mw 所指向的，就是一个中间件函数
// 1.导入express
const express = require('express')
const app = express()

app.use(function (req, res, next) {
    console.log('第一个全局中间件')
    // 统一挂载中间件
    // 获取到请求到达服务器的时间
    const time = Date.now()
    // 为 req 对象,挂载自定义属性,而把时间共享给后面的所有路由
    req.startTime = time
    next()
})
// 定义一个中间件
const mw1 = function (req, res, next) {
    console. log('局部中间件1')
    // 注意:在当前中间件的业务处理完毕后，必须调用next() 函数
    // 表示把流转关系转交给下一个中间件或路由
    next()
}
const mw2 = function (req, res, next) {
    console. log('局部中间件2')
    next()
}

app.use(function (req, res, next) {
    console.log('第二个全局中间件')
    next()
})
app.use(function (req, res, next) {
    console.log('第三个全局中间件')
    next()
})

app.get('/',(req, res)=>{
  res.send('测试挂载中间件'+req.startTime)
})
app.get('/user',(req, res)=>{
    res.send('测试挂载中间件'+req.startTime)
})
// 这个中间件只在”当前路由中生效”，这种用法属于"局部生效的中间
app.get('/list',mw1,(req, res)=>{
    res.send('测试局部中间件'+req.startTime)
})
// 定义多个局部中间件 按顺序使用
app.get('/list1',mw1,mw2,(req, res)=>{
    res.send('方式1:测试局部中间件1'+req.startTime)
})
app.get('/list2',[mw1,mw2],(req, res)=>{
    res.send('方式2:测试局部中间件2'+req.startTime)
})

// 3.启动web服务器
app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1:80');
})